// 抽象产品：内存
interface RAM {
    void getRAM();
}

// 具体产品：内存（型号1）
class RAM1 implements RAM {
    public void getRAM() {
        System.out.println("RAM1: 8GB DDR4");
    }
}

// 具体产品：内存（型号2）
class RAM2 implements RAM {
    public void getRAM() {
        System.out.println("RAM2: 16GB DDR4");
    }
}

// 抽象产品：CPU
interface CPU {
    void getCPU();
}

// 具体产品：CPU（型号1）
class CPU1 implements CPU {
    public void getCPU() {
        System.out.println("CPU1: Intel i5");
    }
}

// 具体产品：CPU（型号2）
class CPU2 implements CPU {
    public void getCPU() {
        System.out.println("CPU2: Intel i7");
    }
}

// 抽象工厂：硬件工厂
interface HardwareFactory {
    RAM createRAM();
    CPU createCPU();
}

// 具体工厂：工厂1
class Factory1 implements HardwareFactory {
    public RAM createRAM() {
        return new RAM1();
    }
    public CPU createCPU() {
        return new CPU1();
    }
}

// 具体工厂：工厂2
class Factory2 implements HardwareFactory {
    public RAM createRAM() {
        return new RAM2();
    }
    public CPU createCPU() {
        return new CPU2();
    }
}

// 客户端代码
public class AbstractFactoryExample {
    public static void main(String[] args) {
        HardwareFactory factory = new Factory1();  // 选择工厂1
        RAM ram = factory.createRAM();
        CPU cpu = factory.createCPU();

        ram.getRAM();
        cpu.getCPU();
    }
}
